#ifndef __LOG__
#define __LOG__

#include <iostream>
#include <cstdio>
#include <ctime>
#include <cstdarg>

namespace mq
{
    #define INF 0
    #define DEG 1
    #define ERR 2
    #define DEFAULT_LEVEL INF
    // ... 只存在于函数声明和宏替换前的声明。
    #define LOG(level_str,level,meg, ...) \
    {\
        if(level >= DEFAULT_LEVEL)\
        {\
            time_t t = time(nullptr);\
            struct tm* ptm;\
            struct tm ret;\
            ptm = localtime_r(&t,&ret);\
            char time[32]; \
            strftime(time,sizeof(time),"[%H:%M:%S]",ptm);\
            ::printf("[%s][%s][%s:%d]\t" meg "\n",time,level_str,__FILE__,__LINE__,##__VA_ARGS__);\
        }\
    }

    #define ILOG(meg,...) LOG("INF",INF,meg,##__VA_ARGS__)
    #define DLOG(meg,...) LOG("DEG",DEG,meg,##__VA_ARGS__)
    #define ELOG(meg,...) LOG("ERR",ERR,meg,##__VA_ARGS__)
}
// ptm = localtime(&t);

// int main()
// {
//     ILOG("%s","hhahhaha");
//     // LOG("INF",INF,"%s","hhahhaha");

//     return 0;
// }

#endif